package com.ftg.learn.chapter04;

/**
 * 青蛙跳井
 *
 * 有7M
 * forg
 *
 * 3M
 * 1m
 * 几次能跳出
 *
 * 能三中不同的方试完成
 *
 * 至少写出一种 for | while | do While
 *
 *
 * 总结 ： for 有次数 开始  结束  增量  ·「数组遍历」
 * while 不明确次数 （没有下标集合 游标） 递归
 * do while 代码块至少要执行一次的时候
 *
 * @author kangjx
 * @date 2022/12/14
 */
public class FrogWell {

    /**
     * 用for来完成青蛙跳井问题
     * @param wellHeight  井深
     * @param jumpNum     青蛙一次跳几米
     * @param down        如果没有出去，下滑几米
     * @return    次数  int
     */
    public static int frogJumpFor(int wellHeight,int jumpNum,int down){
        //判断frogPosition 》= 井深
        int num = 1;
        for( int frogPosition = jumpNum;frogPosition < wellHeight ;frogPosition += jumpNum){
            num++;
            frogPosition -= down;
        }
        return num ;
    }

    /**
     * 用for来完成青蛙跳井问题
     * @param wellHeight  井深
     * @param jumpNum     青蛙一次跳几米
     * @param down        如果没有出去，下滑几米
     * @return    次数  int
     */
    public static int frogJumpFor1(int wellHeight,int jumpNum,int down){
        //判断frogPosition 》= 井深
        int num = 0;
        for( int frogPosition = 0;frogPosition < wellHeight ;){
            frogPosition += jumpNum;
            num++;
            if(frogPosition >= wellHeight){
                break;
            }
            frogPosition -= down;
        }
        return num ;
    }

    /**
     * 用for来完成青蛙跳井问题
     * @param wellHeight  井深
     * @param jumpNum     青蛙一次跳几米
     * @param down        如果没有出去，下滑几米
     * @return    次数  int
     */
    public static int frogJumpFor2(int wellHeight,int jumpNum,int down){
        int num = 0;
        int frogPosition = 0;
        for(;;){
            frogPosition += jumpNum;
            num++;
            if(frogPosition >= wellHeight){
                break;
            }
            frogPosition -= down;
        }
        return num ;
    }

    /**
     * 用for来完成青蛙跳井问题
     * @param wellHeight  井深
     * @param jumpNum     青蛙一次跳几米
     * @param down        如果没有出去，下滑几米
     * @return    次数  int
     */
    public static int frogJumpWhile(int wellHeight,int jumpNum,int down){
        int num = 0;
        int frogPosition = 0;
        while(frogPosition < wellHeight){
            frogPosition += (frogPosition + jumpNum >= wellHeight) ?  jumpNum : jumpNum - down;
            num++;
        }
      return num;
    }

    /**
     * 用for来完成青蛙跳井问题
     * @param wellHeight  井深
     * @param jumpNum     青蛙一次跳几米
     * @param down        如果没有出去，下滑几米
     * @return    次数  int
     */
    public static int frogJumpDoWhile(int wellHeight,int jumpNum,int down){
        int num = 0;
        int frogPosition = 0;
        do{
            if(num != 0){
                frogPosition -= down;
            }
            frogPosition += jumpNum;
//            frogPosition += num == 0 ? jumpNum : jumpNum - down;
            num++;
        }while(frogPosition < wellHeight);
        return num;
    }



    public static void main(String[] args) {
        //调一下你的方法
        System.out.println(frogJumpDoWhile(15, 3, 1));

    }

}
